# -*- coding: utf-8 -*-
# Create your views here.

from django.shortcuts import render_to_response, redirect
from private.models import *

# Para utilizar o MEDIA_URL devemos importar o seguinte
# e em seguida fazer:
# context_instance=RequestContext(request)
# depois de locals(),
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt

dias_semana = {
   0: 'Segunda-feira',
   1: 'Terça-feira',
   2: 'Quarta-feira',
   3: 'Quinta-feira',
   4: 'Sexta-feira',
   5: 'Sábado',
   6: 'Domingo'
}

def home(request):
    title = "Salas"
    
    if Semestre.objects.filter(atual = 1).count() > 0:
        semestre = Semestre.objects.get(atual = 1)
    else:
        semestre = None
    
    if semestre:
        campi = Campus.objects.all()
        
        for campus in campi:
            campus.unidades = Unidade.objects.filter(campus = campus)
            
            for unidade in campus.unidades:
                unidade.salas = Sala.objects.filter(unidade = unidade)
    
    return render_to_response(
        'public/index.html', locals(),
        context_instance=RequestContext(request)
    )

def sala_reservas(request, sala_id):
    sala = Sala.objects.get(id=sala_id)
    title = u'Reservas | ' + unicode(sala)
    
    ocupacao_fixa = Ocupacao_Fixa.objects.filter(sala_id=sala_id)
    ocupacao_fixa = ocupacao_fixa.order_by('dia', 'horario_inicio', 'inicio')
    
    for ocupacao in ocupacao_fixa:
        ocupacao.dia_semana = dias_semana[ocupacao.dia]
    
    ocupacao_variavel = Ocupacao_Variavel.objects.filter(sala_id=sala_id)
    ocupacao_variavel = ocupacao_variavel.order_by('data', 'horario_inicio')
    
    for ocupacao in ocupacao_variavel:
        ocupacao.dia_semana = dias_semana[ocupacao.data.weekday()]
    
    return render_to_response(
        'public/sala/reservas.html', locals(),
        context_instance=RequestContext(request)
    )

def sobre(request):
    title = u'Sobre o sistema'
    
    return render_to_response(
        'public/sobre.html', locals(),
        context_instance=RequestContext(request)
    )

def ajuda(request):
    title = u'Ajuda'
    
    return render_to_response(
        'public/ajuda.html', locals(),
        context_instance=RequestContext(request)
    )

def documentacao(request, pagina = None):
    '''
    Exibe a página de Documentação
    '''
    
    title = u"Documentação"
    
    if pagina == None:
        return render_to_response(
            'public/documentacao/index.html', locals(),
            context_instance=RequestContext(request)
        )
    else:
        title += ' - ' + pagina.replace('-', ' ').strip().capitalize()
        
        return render_to_response(
            'public/documentacao/' + pagina + '.html', locals(),
            context_instance=RequestContext(request)
        )

@csrf_exempt
def cadastrar(request):
    if request.user.is_authenticated():
        return redirect('/')
    
    title = u'Cadastro'
    js = 'cadastrar'
    
    step = 0
    
    if request.POST.has_key('step'):
        step = int(request.POST['step'])
    
    if step == 1:
        perfil = int(request.POST['perfil'])
        if perfil == 2:
            step = 2
    
    elif step == 3:
        perfil = int(request.POST['perfil'])
        matricula = request.POST['matricula']
        
        aluno = Aluno.objects.filter(matricula__icontains = matricula)
        
        if aluno.count() == 0:
            aviso = 'Seu número de matrícula não está cadastrado. Entre em contato com a coordenação.'
            step = 1
        elif aluno.count() > 1:
            aviso = 'Seja mais específico com o seu número de matrícula.'
            step = 1
        else:
            if aluno[0].usuario != None:
                aviso = 'Já existe um usuário associado a este número de matrícula'
                step = 1
            
    elif step == 4:
        perfil = int(request.POST['perfil'])
        matricula_siape = request.POST['matricula_siape']
        
        funcionario = Funcionario.objects.filter(matricula_siape__icontains = matricula_siape)
        
        if funcionario.count() == 0:
            aviso = 'Seu número de matrícula não está cadastrado. Entre em contato com a coordenação.'
            step = 2
        elif funcionario.count() > 1:
            aviso = 'Seja mais específico com o seu número de matrícula.'
            step = 2
            
    elif step == 5:
        perfil = int(request.POST['perfil'])
        matricula = request.POST['matricula']
        
        username = request.POST['username'].strip()
        email = request.POST['email'].strip()
        password = request.POST['password']
        
        if User.objects.filter(username=username).count() > 0:
            aviso = 'Nome de usuário já existe. Escolha outro por favor'
            step = 3
        elif len(email.split('@')) != 2 or len(email.split('@')[1].split('.')) < 2:
            aviso = 'Forneça um e-mail válido'
            step = 3
        elif User.objects.filter(email=email).count() > 0:
            aviso = 'E-mail já associado a uma outra conta'
            step = 3
        else:
            user = User.objects.create_user(username, email, password)
            user.save()
            
            aluno = Aluno.objects.get(matricula__icontains = matricula)
            aluno.usuario = user
            
            grupo = Group.objects.filter(name__icontains='aluno')
            if grupo.count() == 1:
                aluno.usuario.groups.add(grupo[0])
            
            aluno.save()
            
            return redirect('/accounts/login')
    
    elif step == 6:
        perfil = int(request.POST['perfil'])
        matricula_siape = request.POST['matricula_siape']
        
        username = request.POST['username'].strip()
        email = request.POST['email'].strip()
        password = request.POST['password']
        
        if User.objects.filter(username=username).count() > 0:
            aviso = 'Nome de usuário já existe. Escolha outro por favor'
            step = 4
        elif len(email.split('@')) != 2 or len(email.split('@')[1].split('.')) < 2:
            aviso = 'Forneça um e-mail válido'
            step = 4
        elif User.objects.filter(email=email).count() > 0:
            aviso = 'E-mail já associado a uma outra conta'
            step = 4
        else:
            user = User.objects.create_user(username, email, password)
            user.save()
            
            funcionario = Funcionario.objects.get(matricula_siape__icontains = matricula_siape)
            funcionario.usuario = user
            
            funcionario.save()
            
            return redirect('/accounts/login')
    
    return render_to_response(
        'public/cadastrar.html', locals(),
        context_instance=RequestContext(request)
    )